Traduction d'une boucle tantque en assembleur 8051 |
Le dictionnaire des variables correspondant à
l'algorithme est (visualiser l'algorithme):
Le choix de l'allocation est arbitraire. Ce choix est généralement guidé par les contraintes imposées par le cahier des charges. La notation entier.b n'est pas normalisée. Elle est appliquée au choix qui est fait ici d'implanter cet algorithme en assembleur 51. Enfin, le fait qu'en assembleur, il n’est possible que de faire une opération par instruction, il est nécessaire d'ajouter une variable intermédiaire denum.result allouée dans A. L'utilisation de B est imposée par la multiplication en assembleur 51. La traduction de l'algorithme donne : org 0000h ljmp debut org 0030h debut: mov R0,#00h ;
result <- 0 mov B,R0 ;
B <- R0 pour la multiplication mov A,R1 ; A <- R1 pour la multiplication mul AB ; A <-
demum.reslut subb A,R2 ; test si denum.result - num
< 0 tq: jnc fintq ; sortie de la boucle Tant que inc
R0 ; result <- result + 1
boucle tant que(condition) faire mov
A,R1 ; A <- R1 pour la multiplication mul AB ; A <- demum.reslut subb A,R2 ; test si denum.result - num
< 0
test fintq: jnz sivrai ; si denum.result>num alors sivrai finsi: mov P0,R0 bou: ret ; fin du code sivrai: dec R0 ; result <- result - 1 ljmp finsi
; aller à
finsi end |